La programación orientada a componentes es una variante de la programación orientada a objetos que utiliza la composición (en vez de la herencia) para establecer relaciones entre los diferentes elementos.
La programación orientada a componentes crea soluciones modulares y autónomas.
Las soluciones creadas pueden ser utilizadas en el desarrollo de soluciones WEB.
Un componente es una unidad de software independiente que se combina con otras para crear un sistema. Este posee un conjunto de interfaces y requisitos, y ha de poder ser desarrollado, adquirido, incorporado al sistema y compuesto con otros componentes de forma independiente, en tiempo y espacio.
Puede ser usado por otros elementos de software.
Puede ser usado por los clientes sin la necesidad de la intervención del desarrollador.
Incluye las especificaciones de todas las dependencias.
Incluye documentación de las funcionalidades que ofrece.
Se puede entender su funcionamiento en base a las especificaciones.
Se puede acoplar a otros componentes.
Puede ser incorporado a un sistema de manera suave y rápida.
Unidad compilada y reutilizable a través de una interfaz.
Se incluye en un paquete instalable y posee pocas o ninguna dependencia.
Puede estar implementado en cualquier lenguaje de programación y puede ser utilizado en cualquier lenguaje (normalmente orientados a objetos).
Son una solución de calidad (comercial o gratuita).
Una de las ventajas de los componentes es que aseguran la reutilización de código. Al reutilizar código se están incorporando características como:
Modularidad: puede contemplarse como la unión de varias partes que interactúan entre sí.
Alta cohesión: un componente tiene un alcance definido y perfectamente ubicado, es decir, solo se centra en una tarea concreta.
Bajo acoplamiento: los módulos de un programa casi no dependen unos de otros.
Ocultación de información: los módulos están ocultos entre sí.
Los procesos de desarrollo basados en reutilización se clasifican en:
Desarrollo con reutilización de componentes (PCB).
Desarrollo o adaptación de componentes reutilizables (POC).
Existencia de repositorios o bases de componentes reutilizables.
Componentes confiables que actúan de acuerdo a sus especificaciones.
Los componentes están debidamente documentados.
Se pueden diferenciar dos tipos diferentes de reutilización de componentes:
Reutilización de caja negra: En este caso no se conoce cómo está implementado el componente, simplemente se utiliza conociendo su interfaz.
Reutilización de caja blanca: Se conoce la implementación del componente y puede ser modificado para adaptarlo a una determinada solución.
Incremento de la confiabilidad con un menor porcentaje de errores.
Mejora el rendimiento del componente en cada reutilización.
Reduce la cantidad de código a producir.
Reduce el esfuerzo en crear métodos ya creados.
Reduce el tiempo de entrega.
Reduce los costos de desarrollo y mantenimiento.
Un componente debe especificar sus necesidades.
Para poder implantar un componente de manera que funcione correctamente se necesita:
Modularidad: puede contemplarse como la unión de varias partes que interactúan entre sí.
Alta cohesión: un componente tiene un alcance definido y perfectamente ubicado, es decir, solo se centra en una tarea concreta.
Bajo acoplamiento: los módulos de un programa casi no dependen unos de otros.
Arquitectura común de intermediarios en peticiones a objetos.
Establece una plataforma de desarrollo de sistemas distribuidos.
Facilita la invocación de métodos remotos.
Está orientado a objetos.
Actualmente admite Ada, C, C++, C++11, Lisp, Ruby, Smalltalk, Java, COBOL, PL/I y Python.
Modelo de Objetos de Componentes Distribuidos).
Propietaria de Microsoft.
Desarrolla componentes software distribuidos.
Los componentes se comunican entre sí.
Está en desuso en favor del framework Microsoft .NET.
Framework de Microsoft que hace énfasis en la transparencia de redes.
Es independiente de la plataforma de hardware.
Permite un rápido desarrollo de aplicaciones.
Es la respuesta de Microsoft a la plataforma Java de Oracle Corporation.
Parte del framework .NET es libre bajo el nombre de .NET Core.
Modelo de componentes basado en arquitectura cliente servidor.
Ofrece una solución multiplataforma.
Es de fácil reutilización.
Tiene una integración universal con otros componentes.
Esta basado en una máquina virtual de Java.
Java a estado a la la vanguardia del BSBC (Desarrollo de Software Basado en Componentes).
Las interfaces en cualquier módulo software especifican la funcionalidad de ese módulo. Desde el punto de vista de un componente es exactamente igual, una interfaz determina el conjunto de operaciones que puede realizar ese elemento.
Normalmente se especifican el conjunto de métodos públicos del componente, los atributos públicos que utiliza y el listado de eventos que puede generar.
La interfaz es el nexo de unión entre el cliente del componente y su implementación. De esta forma se logra independencia entre la utilización del componente y su implementación.
Para lograr un correcto funcionamiento del componente se deben respetar las interfaces en ambas direcciones.
El componente debe comportarse según especifica su interfaz.
La utilización del componente debe realizarse acorde con lo especificado en la interfaz del mismo.
Se pueden distinguir dos niveles de interfaces:
Interface de importación: es la interface que puede utilizar un componente para su implementación.
Interface de exportación: es la interface generada por el componente para que pueda ser utilizado en cualquier contexto.

Cuando se especifica e implementa un componente es necesario indicar:
Características del componente.
Tipo de componente:
Componentes de despliegue: Permiten formar un sistema ejecutable.
Componentes productos de trabajo: surgen durante el proceso de desarrollo.
Implementación del componente.
Un componente puede ser utilizado con diferentes modelos de componentes.
Para garantizar el mayor grado de utilización, se definen una serie de estados por los que puede pasar la creación de un componente:
Especificación del componente: es necesario detallar el componente de manera independiente a la plataforma de desarrollo.
Esta etapa debe generar una especificación de las interfaces que forman el componente.
Implementación del componente: se procede al desarrollo de sus módulos en un lenguaje de programación determinado y cumpliendo con las características del modelo de componentes.
Instalación del componente: registrar el componente en un sistema determinado para que el resto de aplicaciones puedan hacer uso de él.
Objeto componente: cuando ya se ha instalado el componente se pueden crear instancias de él para su utilización.
Contratos del componente:
Contratos de uso: establece la funcionalidad del componente a través de su interfaz.
Contratos de realización: se trata de un acuerdo entre la implementación y la especificación del componente.